package LinkedList;

import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/*
* 学习LinkedList的用法
*
* */
public class demo {
    public static void main(String[] args) {
        //LinkedList实现了List(列表) Queue(队列) Deque(双端队列的)的接口
        // 先使用List接收
        List<Integer> list = new LinkedList<>();
        int a = 10;
        // 添加到列表中
        list.add(a);
        //根据索引值返回值
        Integer integer = list.get(0);
        System.out.println(integer);
        //判断该集合中是否含有该元素
        boolean contains = list.contains(a);
        System.out.println("contains = " + contains);

        // 队列接口
        Queue<Integer> queue = new LinkedList<>();
        // 添加元素
        queue.offer(a);
        // 检索但不删除元素的头
        Integer element = queue.element();
        System.out.println("element = " + element);
        // 检索但不删除元素的头
        Integer peek = queue.peek();
        System.out.println("peek = " + peek);
        // 检索但删除元素的头
        Integer poll = queue.poll();
        System.out.println("poll = " + poll);
        // 队列的长度
        int size = queue.size();
        System.out.println("size = " + size);
        queue.offer(a);
        // 检索并删除元素的头
        Integer remove = queue.remove();
        System.out.println("remove = " + remove);

        // 双向队列
        Deque<Integer> deque = new LinkedList<>();
        // 加入到队列的头部
        deque.addFirst(a);
        int b = 20;
        // 加入到队列的尾部
        deque.addLast(b);
        // 队列中是否含有该元素
        boolean contains1 = deque.contains(a);
        System.out.println("contains1 = " + contains1);
        // 检索但不删除队列的头部
        Integer element1 = deque.element();
        System.out.println("element1 = " + element1);
        //检索但不删除队列的头部、
        Integer first = deque.getFirst();
        System.out.println("first = " + first);
        // 检索但不删除队列的尾部
        Integer last = deque.getLast();
        System.out.println("last = " + last);
        //将指定元素插入队列的尾部
        deque.add(30);
        // 在队列的前面加入元素
        deque.offerFirst(0);
        // 在队列的尾部加入元素
        deque.offerLast(40);
        // 检索但不删除队列的头部
        Integer peek1 = deque.peek();
        System.out.println("peek1 = " + peek1);
        // 检索但不删除队列的头部
        Integer integer1 = deque.peekFirst();
        System.out.println("integer1 = " + integer1);
        // 检索但不删除队列的尾部
        Integer integer2 = deque.peekLast();
        System.out.println("integer2 = " + integer2);
        // 检索并删除队列的头部
        Integer poll1 = deque.poll();
        System.out.println("poll1 = " + poll1);
        //检索并删除队列的头部
        Integer integer3 = deque.pollFirst();
        System.out.println("integer3 = " + integer3);
        // 检索并删除队列的尾部
        Integer integer4 = deque.pollLast();
        System.out.println("integer4 = " + integer4);
        // 队列的长度
        int size1 = deque.size();
        System.out.println("size1 = " + size1);
    }
}
